import Vue from 'vue'
import VueRouter from 'vue-router'
// 导入页面组件（确保路径正确）
import Home from '../views/Home.vue'
import Register from '../views/Register.vue'
import Login from '../views/Login.vue'
import Personaldata from '../views/Personaldata.vue'
// 导入Vuex（仅用于状态同步，避免直接在路由中调用接口）
import store from '../store'

// 注册路由插件
Vue.use(VueRouter)

// 路由配置
const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
    meta: { requiresAuth: true } // 需要登录才能访问
  },
  {
    path: '/register',
    name: 'Register',
    component: Register,
    meta: { requiresAuth: false } // 无需登录
  },
  {
    path: '/login',
    name: 'Login',
    component: Login,
    meta: { requiresAuth: false } // 无需登录
  },
  {
    path: '/personaldata',
    name: 'Personaldata', // 规范命名（首字母大写）
    component: Personaldata,
    meta: { requiresAuth: true } // 需要登录才能访问
  }
]

// 创建路由实例
const router = new VueRouter({
  mode: 'history', // 使用HTML5 history模式
  base: process.env.BASE_URL,
  routes,
  scrollBehavior(to, from, savedPosition) {
    // 路由切换时滚动到顶部
    return savedPosition || { x: 0, y: 0 }
  }
})

// 导航守卫（路由拦截）
router.beforeEach((to, from, next) => {
  // 从localStorage读取用户数据（避免Vuex刷新丢失）
  const rawUserData = localStorage.getItem('userData')
  const userData = rawUserData ? JSON.parse(rawUserData) : {}
  const isAuthenticated = !!userData.token // 判断是否登录

  // 同步用户数据到Vuex
  store.commit('initUserData', userData)

  // 调试日志
  console.log('[导航守卫]', {
    from: from.path,
    to: to.path,
    requiresAuth: to.meta.requiresAuth,
    isAuthenticated
  })

  // 1. 已登录状态处理
  if (isAuthenticated) {
    // 已登录用户访问登录/注册页：重定向到目标页（使用replace避免历史记录问题）
    if (['/login', '/register'].includes(to.path)) {
      const redirectPath = to.query.redirect || '/'
      // 避免重定向到登录/注册页
      if (['/login', '/register'].includes(redirectPath)) {
        next({ path: '/', replace: true })
        return
      }
      // 避免重复重定向到当前页
      if (redirectPath === from.path) {
        next(false)
        return
      }
      next({ path: redirectPath, replace: true })
      return
    }
    // 已登录用户访问其他页：直接放行
    next()
    return
  }

  // 2. 未登录状态处理
  if (to.meta.requiresAuth && !isAuthenticated) {
    // 未登录访问需要认证的页面：重定向到登录页
    const redirect = to.path !== '/login' ? to.fullPath : '/'
    // 避免重复重定向到登录页
    if (to.path === '/login' && redirect === from.fullPath) {
      next(false)
      return
    }
    next({ path: '/login', query: { redirect }, replace: true })
    return
  }

  // 3. 其他情况（未登录访问无需认证的页面）：直接放行
  next()
})

// 导出路由实例（供main.js导入）
export default router